class: inverse,left, middle background-image: url(data:image/png;base64,#background.png) background-size: cover <img src="data:image/png;base64,#LOGO_DIPLOMADO.png" width="500px"/> ##Módulo 2: Percepción remota satelital óptica ### ClasificacÃon Supervisada Gabriel Castro gabriel.castro.b@pucv.cl</a><br> .large[<b><a href="https://www.pucv.cl/uuaa/site/edic/base/port/labgrs.html">LabGRS</a> | Septiembre 2022</b>] <br> --- class: center,middle background-image: url(data:image/png;base64,#labgrs_logo.png) background-size: 35% --- ## ¿Qué aprenderemos en esta unidad? Aprenderemos ... -- 1) Indices espectrales. (✓) -- 2) Clasificación no supervisada. (✓) -- 3) Clasificación supervisadas. (✓) -- 4) Detección y análisis de cambios. --- ## ¿Qué podemos entender como clasificación supervisada? -- **Una clasificación supervisada se basa en la idea de que un usuario puede seleccionar pÃxeles de muestra en una imagen que son representativos de clases especÃficas y luego dirigir el software de procesamiento de imágenes para usar estos sitios de capacitación como referencias para la clasificación de todos los demás pÃxeles en la imagen.** -- **La clasificación supervisada permite clasificar el ráster por medio de cada pÃxel de una celda, es necesario tener conocimiento previo de las clases del área de estudio (uso actual del suelo). Se debe marcar puntos y asignar un valor numérico para cada clase. (ESRI, 2012)** -- **Una clasificación supervisada en percepción remota permite la conversión de multiples inputs de capas rasters a grupos de pixeles con caracteristicas similares. (Wegmann, Leutner, 2016)** --- #### Esquema clasificación supervisada. ##### Transformar información contÃnua de una grilla raster en información discreta asociada a categorÃas de uso de suelo.  --- ## Clasificación supervisada vs no supervisada. ### No supervisada. > Identifica clusters de pixeles espectralmente similares. > > Algoritmo no es entrenado por el usuario. > > Se puede o no, tener conocimiento del area de interes. -- ### Supervisada. > Utiliza muestras de entrenamiento y validación. > > Existe un conocimiento previo del area y las clases potenciales a clasificar. > > Algoritmo "aprede" de las muestras de entrenamiento de cada pixel para clasificar la imagen con los predictores. --- ### Antes de clasificar, algunos pasos a considerar. .pull-left[ * Definir porque se requiere una clasificación y como se va a utilizar. * Definir el area de estudio. * Esquema de clasificación (definir clases de interes). * Seleccionar imagenes (predictores). * Preparar la imagen para su clasificación. * Generar datos complementarios (DEM, indices espectrales, capas base). ] .pull-right[ * Definir el tipo de clasificación (supervisada / no supervisada). * Colectar data de entrenamiento y validación (caso de CS). * Crear mapa de clasificacón (raster resultante del modelo) * Evaluar los resultados de la clasificación. ]  --- ### Algunos ejemplos de clasificaciones supervisadas para la creación de mapas de convertura y uso de suelo. ### ESA Worldcover: 2020. > Producto de cobertura terrestre global de referencia con una resolución de 10 m para 2020. > > Generación rápida y validación de una cobertura terrestre mundial basada en las constelaciones Sentinel-2 y Sentinel-1. > > Cuenta con 10 clases de cobertura terestre. > > 75% de precisión general. > > El producto ESA WorldCover ha sido validado de forma independiente por la Universidad de Wageningen (precisión estadÃstica) y el IIASA (precisión espacial). ---  #### link acceso: https://esa-worldcover.org/en --- #### Landcover Zhao 2014-2015 Chile. > Producto creado a partir de la coleccion Landsat 30 m > > El esquema propuesto incluye 10 clases en el nivel 1, 30 clases en el nivel 2 y 35 clases en el nivel 3. > > LULC Dinamico del año 2014-2015 (se utilizaron todas las imagenes Landsat disponibles durante este periodo de tiempo para todo Chile) > > Mapa lvl 1 con 80% de precisión general  ##### link descarga y manual de uso: http://www.gep.uchile.cl/Landcover_CHILE.html --- .pull-left[  ] .pull-right[  ] --- ### Creación del esquema de clasificación. * ¿Cuantas clases quiero clasificar dentro de mi área de estudio? * ¿Cuantas clases puedo identificar con seguridad? #### algunas consideraciones necesarias son: > Se necesita de un buen muestreo para identificar las zonas o los pixeles mas homogeneos por clase. > > Evitar las muestras de "borde" que puedan estar influidas por otros usos o coberturas de suelo. > > Tener una cantidad de muestras adecuadas (Esto depende de la cantidad de area que cubre mi clase, la cantidad de predictores que utilizare entre otros) > > Buen numero de muestras por clase oscila entre 30-50 muestras (muchas muestras de entrenamiento pueden llegar a confundir la clasificación del modelo) > > Para el ejercicio practico hemos definido 6 clases de cobertura y uso de suelo que veremos mas adelante... --- #### Selección de las imagenes para la clasificación.  --- #### Definir variables secundarias a mi imagen satelital. .pull-left[ #### Las variables auxiliares son aquellas capas raster externas a nuestra imagen base: > Estas deben tener la misma extensión y resolución espacial para que puedan ser incluidas en la clasificación y se incorporaran dependiendo de nuestras necesidades. > > Algunas de las varibales auxiliares mas comunes son: > > 1) Modelos de elevación digital. > > 2) indices espectrales (NDVI, NDWI, NDSI) > > 3) Pendiente, orientación. > > 4) FenologÃa > > 5) GeologÃa ] .pull-right[  ] --- #### Metodos de clasificación supervisada (paramétricos). .pull-left[ #### Clasificación por minima distancia: > Puesto que cada clase dispone de una reflectividad media para cada una de las bandas, podemos situar cada una de las clases como un centroide en un espacio de variables. Es este espacio de variables se puede calcular la distancia entre un pixel y una clase. > > Evidentemente el pixel x se asignará a la clase respecto a la cual su distancia sea mÃnima. En definitiva, se definen una serie de hiperesferas que rellenan el hiperespacio de variables sin intersectarse. > > Este método no es demasiado bueno ya que sobreclasifica la imagen, es decir ningún pixel queda sin clasificar. > ] .pull-right[  ] --- #### Metodos de clasificación supervisada (paramétricos). .pull-left[ #### Clasificación por maxima verosimilitud: > El clasificador de máxima probabilidad asume que los datos siguen una función de distribución normal para asignar la probabilidad de que un pixel cualquiera pertenezca a cada una de las clases. > > El pixel se asigna de este modo a la clase a la que es más probable que pertenezca. > > Los elipses que rodean nuestros puntos, corresponden a lineas de isoprobabilidad, por tanto el pixel se clasificará como perteneciente a la clase en la que sus valores resulten más probables. > > Sin embargo la hipótesis de que los datos de reflectividad siguen una distribución normal no siempre se cumple y deberÃa verificarse siempre. > ] .pull-right[  ] --- #### Metodos de clasificación supervisada. .pull-left[ #### Clasificación por Random Forest (no paramétricos) > Clasificador de machine learning el cual ajusta un "bosque de decisiones" a subconjuntos cambiantes de los datos de entrenamiento. > > En cada nodo o división se prueba un subconjunto aleatorio de variables predictoras seleccionando el predictor con la mejor separación. > > Este proceso se ajusta a n cantidad de arboles cada uno con diferentes subconjuntos de datos aleatorios en cada nodo. > ] .pull-right[   ] --- ### Antes de comenzar... #### Tener a disposición algún software GIS (Argis, Qgis). #### Materiales clase: > Shapefile clases zona estudio Maule. > > Raster stack imagen Landsat C2L2 verano mas variables auxiliares. ####Librerias R: ```r library(RStoolbox) library(terra) library(sf) library(caret) ``` ---  .pull-left[ #### Puntos clases de uso y cobertura de suelo: * 1) Agua * 2) Suelo sin vegetación * 3) Agricola ] .pull-right[ * 4) Bosque * 5) Zonas rocosas * 6) Praderas y matorral ] #### Agregue 3 puntos para cada clase de uso y cobertura de suelo. --- #### Preparando nuestro set de datos en R. ```r puntos <- st_read("PUNTOS_CLASIFICACION.shp") # puntos fotointerpretados. ``` ``` ## Reading layer `PUNTOS_CLASIFICACION' from data source ## `D:\Gabriel_Castro_LABGRS\LBGRS-PUCV\PROJECTOS 2020\03_DIPLOMADO_LBGRS\4_Aplicaciones_2\PUNTOS_CLASIFICACION.shp' ## using driver `ESRI Shapefile' ## Simple feature collection with 180 features and 1 field ## Geometry type: POINT ## Dimension: XY ## Bounding box: xmin: 280617.8 ymin: 6041380 xmax: 308667.1 ymax: 6055368 ## Projected CRS: WGS 84 / UTM zone 19S ``` ```r clases <-sample(c("AGUA","SUELO SIN VEGETACION","AGRICOLA","BOSQUE","ZONAS ROCOSAS","PRADERA Y MATORRAL"), size = 180, replace = TRUE) # crear un vector que contenga el nombre de mis clases. data_train <- data.frame(clases,puntos) # unir mis puntos con las clases. data_train$clase[data_train$id==1]<- "AGUA" data_train$clase[data_train$id==2]<- "SUELO SIN VEGETACION" data_train$clase[data_train$id==3]<- "AGRICOLA" data_train$clase[data_train$id==4]<- "BOSQUE" data_train$clase[data_train$id==5]<- "ZONAS ROCOSAS" data_train$clase[data_train$id==6]<- "PRADERA Y MATORRAL" puntos_class <- data_train[,-1] ``` --- ```r tabla_puntos <- data.frame(puntos_class) # 180 observaciones para 6 catogorias print(tabla_puntos) ``` ``` ## id geometry clase ## 1 1 POINT (294163.9 6049757) AGUA ## 2 1 POINT (289180 6049674) AGUA ## 3 1 POINT (295404.7 6048658) AGUA ## 4 1 POINT (297230.4 6048605) AGUA ## 5 1 POINT (297460.9 6046247) AGUA ## 6 1 POINT (282996.7 6044404) AGUA ## 7 1 POINT (283133.1 6043816) AGUA ## 8 1 POINT (284326.1 6043978) AGUA ## 9 1 POINT (284113.4 6045060) AGUA ## 10 1 POINT (283989.3 6044351) AGUA ## 11 1 POINT (291398.7 6047058) AGUA ## 12 1 POINT (290476.9 6047501) AGUA ## 13 1 POINT (290157.9 6047856) AGUA ## 14 1 POINT (291522.7 6048919) AGUA ## 15 1 POINT (292409 6049380) AGUA ## 16 1 POINT (290841.7 6049856) AGUA ## 17 1 POINT (294961.5 6049380) AGUA ## 18 2 POINT (283096.4 6047029) SUELO SIN VEGETACION ## 19 2 POINT (283285.8 6047039) SUELO SIN VEGETACION ## 20 2 POINT (282664 6046583) SUELO SIN VEGETACION ## 21 2 POINT (282481.3 6046210) SUELO SIN VEGETACION ## 22 2 POINT (282570.4 6046236) SUELO SIN VEGETACION ## 23 2 POINT (287609.5 6049753) SUELO SIN VEGETACION ## 24 3 POINT (280629.4 6041511) AGRICOLA ## 25 3 POINT (281245.4 6042421) AGRICOLA ## 26 3 POINT (281619.9 6052323) AGRICOLA ## 27 3 POINT (281639.8 6052824) AGRICOLA ## 28 3 POINT (291127.5 6052374) AGRICOLA ## 29 3 POINT (291225 6052738) AGRICOLA ## 30 3 POINT (294274.4 6055182) AGRICOLA ## 31 3 POINT (281491.9 6046031) AGRICOLA ## 32 3 POINT (282991.4 6048921) AGRICOLA ## 33 3 POINT (282807 6049956) AGRICOLA ## 34 3 POINT (281150.7 6050231) AGRICOLA ## 35 3 POINT (281195 6050420) AGRICOLA ## 36 3 POINT (280989 6050636) AGRICOLA ## 37 3 POINT (280979.6 6052272) AGRICOLA ## 38 3 POINT (282301.2 6054792) AGRICOLA ## 39 4 POINT (296735.5 6052049) BOSQUE ## 40 4 POINT (298900.2 6051832) BOSQUE ## 41 4 POINT (300730.4 6051504) BOSQUE ## 42 4 POINT (301479.3 6051074) BOSQUE ## 43 4 POINT (297118.8 6053117) BOSQUE ## 44 4 POINT (303218.7 6050363) BOSQUE ## 45 4 POINT (303119 6045695) BOSQUE ## 46 4 POINT (295308.6 6041777) BOSQUE ## 47 4 POINT (300712.7 6050104) BOSQUE ## 48 4 POINT (301058.3 6049545) BOSQUE ## 49 4 POINT (281729.9 6043203) BOSQUE ## 50 4 POINT (300839 6055012) BOSQUE ## 51 4 POINT (301618.9 6055255) BOSQUE ## 52 4 POINT (301089.4 6054602) BOSQUE ## 53 4 POINT (307153.8 6054083) BOSQUE ## 54 2 POINT (285419.8 6044773) SUELO SIN VEGETACION ## 55 2 POINT (286470.1 6043962) SUELO SIN VEGETACION ## 56 2 POINT (285269.7 6046989) SUELO SIN VEGETACION ## 57 2 POINT (284685.3 6042538) SUELO SIN VEGETACION ## 58 2 POINT (286795.8 6042491) SUELO SIN VEGETACION ## 59 2 POINT (287671 6043450) SUELO SIN VEGETACION ## 60 2 POINT (304674.4 6054189) SUELO SIN VEGETACION ## 61 2 POINT (305190.7 6054008) SUELO SIN VEGETACION ## 62 1 POINT (289005.7 6049154) AGUA ## 63 1 POINT (283720.3 6043589) AGUA ## 64 1 POINT (283776.6 6045503) AGUA ## 65 1 POINT (290920.1 6047182) AGUA ## 66 2 POINT (283200.5 6047093) SUELO SIN VEGETACION ## 67 2 POINT (283219.9 6047003) SUELO SIN VEGETACION ## 68 2 POINT (282173.3 6046808) SUELO SIN VEGETACION ## 69 2 POINT (282100.1 6046906) SUELO SIN VEGETACION ## 70 2 POINT (284708 6048496) SUELO SIN VEGETACION ## 71 2 POINT (281128 6047141) SUELO SIN VEGETACION ## 72 3 POINT (292561.1 6052779) AGRICOLA ## 73 3 POINT (292167.2 6052986) AGRICOLA ## 74 3 POINT (293738.2 6054548) AGRICOLA ## 75 3 POINT (285002.7 6049092) AGRICOLA ## 76 3 POINT (283047.4 6049518) AGRICOLA ## 77 3 POINT (281103.1 6052091) AGRICOLA ## 78 4 POINT (296381 6052731) BOSQUE ## 79 4 POINT (299126.2 6052541) BOSQUE ## 80 4 POINT (304687.7 6053111) BOSQUE ## 81 4 POINT (301949.1 6046308) BOSQUE ## 82 4 POINT (296939.3 6041768) BOSQUE ## 83 4 POINT (300442.4 6049147) BOSQUE ## 84 2 POINT (286352.7 6044293) SUELO SIN VEGETACION ## 85 5 POINT (302707.9 6044614) ZONAS ROCOSAS ## 86 5 POINT (303461.3 6044548) ZONAS ROCOSAS ## 87 5 POINT (306339.5 6045040) ZONAS ROCOSAS ## 88 5 POINT (306359.4 6044435) ZONAS ROCOSAS ## 89 5 POINT (306124.6 6047767) ZONAS ROCOSAS ## 90 5 POINT (306058.7 6047674) ZONAS ROCOSAS ## 91 5 POINT (308163 6045972) ZONAS ROCOSAS ## 92 5 POINT (307741.2 6041984) ZONAS ROCOSAS ## 93 5 POINT (308102.1 6041859) ZONAS ROCOSAS ## 94 5 POINT (306132.3 6041391) ZONAS ROCOSAS ## 95 5 POINT (305912.4 6041650) ZONAS ROCOSAS ## 96 5 POINT (287055 6051182) ZONAS ROCOSAS ## 97 5 POINT (286917.7 6051778) ZONAS ROCOSAS ## 98 5 POINT (286636.3 6052136) ZONAS ROCOSAS ## 99 5 POINT (285461.9 6053427) ZONAS ROCOSAS ## 100 5 POINT (282839.6 6055114) ZONAS ROCOSAS ## 101 5 POINT (283262.8 6055164) ZONAS ROCOSAS ## 102 5 POINT (307048.5 6050798) ZONAS ROCOSAS ## 103 5 POINT (304619 6050232) ZONAS ROCOSAS ## 104 5 POINT (304650.6 6050293) ZONAS ROCOSAS ## 105 5 POINT (304916.5 6050080) ZONAS ROCOSAS ## 106 6 POINT (307875 6049876) PRADERA Y MATORRAL ## 107 6 POINT (308273.8 6050588) PRADERA Y MATORRAL ## 108 6 POINT (307531.6 6051494) PRADERA Y MATORRAL ## 109 6 POINT (308467.7 6051785) PRADERA Y MATORRAL ## 110 6 POINT (296638 6050372) PRADERA Y MATORRAL ## 111 6 POINT (296636.9 6050198) PRADERA Y MATORRAL ## 112 6 POINT (297691.6 6049754) PRADERA Y MATORRAL ## 113 6 POINT (297905.4 6049602) PRADERA Y MATORRAL ## 114 6 POINT (292537.8 6048093) PRADERA Y MATORRAL ## 115 6 POINT (291554 6047699) PRADERA Y MATORRAL ## 116 6 POINT (293269 6048087) PRADERA Y MATORRAL ## 117 6 POINT (283508.8 6052354) PRADERA Y MATORRAL ## 118 6 POINT (288641.5 6046016) PRADERA Y MATORRAL ## 119 6 POINT (295953.3 6046406) PRADERA Y MATORRAL ## 120 6 POINT (295914.6 6045882) PRADERA Y MATORRAL ## 121 6 POINT (305549.6 6042138) PRADERA Y MATORRAL ## 122 6 POINT (306172.2 6042143) PRADERA Y MATORRAL ## 123 6 POINT (308400.7 6045647) PRADERA Y MATORRAL ## 124 6 POINT (282604.2 6043330) PRADERA Y MATORRAL ## 125 6 POINT (282187.7 6043105) PRADERA Y MATORRAL ## 126 6 POINT (282895.6 6041482) PRADERA Y MATORRAL ## 127 6 POINT (308667.1 6050138) PRADERA Y MATORRAL ## 128 6 POINT (296400.9 6050237) PRADERA Y MATORRAL ## 129 6 POINT (292176.7 6048370) PRADERA Y MATORRAL ## 130 6 POINT (292334 6047599) PRADERA Y MATORRAL ## 131 6 POINT (284399.5 6052279) PRADERA Y MATORRAL ## 132 6 POINT (288829.8 6045645) PRADERA Y MATORRAL ## 133 6 POINT (305107.6 6042197) PRADERA Y MATORRAL ## 134 6 POINT (308137.6 6045147) PRADERA Y MATORRAL ## 135 6 POINT (284786.7 6054500) PRADERA Y MATORRAL ## 136 1 POINT (295138.8 6051423) AGUA ## 137 1 POINT (284751.5 6045077) AGUA ## 138 1 POINT (291788.6 6046916) AGUA ## 139 1 POINT (290370.6 6048689) AGUA ## 140 2 POINT (281192.3 6047322) SUELO SIN VEGETACION ## 141 2 POINT (282153.3 6046272) SUELO SIN VEGETACION ## 142 3 POINT (280678.8 6045341) AGRICOLA ## 143 3 POINT (280617.8 6046361) AGRICOLA ## 144 3 POINT (283656.7 6047836) AGRICOLA ## 145 3 POINT (283976.9 6047771) AGRICOLA ## 146 3 POINT (282872.3 6048306) AGRICOLA ## 147 3 POINT (281098.1 6052421) AGRICOLA ## 148 4 POINT (299330.1 6051420) BOSQUE ## 149 4 POINT (302624.9 6050164) BOSQUE ## 150 4 POINT (302144 6047166) BOSQUE ## 151 4 POINT (297752.5 6042426) BOSQUE ## 152 4 POINT (299551.7 6047680) BOSQUE ## 153 4 POINT (301658.8 6053804) BOSQUE ## 154 2 POINT (285720.1 6044711) SUELO SIN VEGETACION ## 155 2 POINT (285299.6 6046779) SUELO SIN VEGETACION ## 156 2 POINT (285090.8 6041995) SUELO SIN VEGETACION ## 157 2 POINT (286320.5 6042911) SUELO SIN VEGETACION ## 158 2 POINT (287398.5 6043603) SUELO SIN VEGETACION ## 159 1 POINT (290632.6 6049795) AGUA ## 160 1 POINT (296946.8 6047559) AGUA ## 161 1 POINT (298276.2 6045698) AGUA ## 162 1 POINT (283404.4 6044936) AGUA ## 163 1 POINT (283470.8 6043632) AGUA ## 164 2 POINT (284716.2 6048647) SUELO SIN VEGETACION ## 165 3 POINT (283743.1 6048851) AGRICOLA ## 166 3 POINT (284729.1 6049213) AGRICOLA ## 167 3 POINT (283465 6049837) AGRICOLA ## 168 4 POINT (302124.1 6054265) BOSQUE ## 169 4 POINT (305467.6 6053144) BOSQUE ## 170 4 POINT (305726.9 6054026) BOSQUE ## 171 2 POINT (282662.4 6049298) SUELO SIN VEGETACION ## 172 5 POINT (305116.4 6044304) ZONAS ROCOSAS ## 173 5 POINT (306033.7 6044785) ZONAS ROCOSAS ## 174 5 POINT (307836.2 6045636) ZONAS ROCOSAS ## 175 5 POINT (307619.9 6041890) ZONAS ROCOSAS ## 176 5 POINT (305700.3 6041380) ZONAS ROCOSAS ## 177 5 POINT (287354.2 6050608) ZONAS ROCOSAS ## 178 5 POINT (283338.2 6055368) ZONAS ROCOSAS ## 179 5 POINT (307446.2 6050694) ZONAS ROCOSAS ## 180 5 POINT (306211.5 6050833) ZONAS ROCOSAS ``` --- #### Separar nuestros datos: puntos de entrenamiento y validación. ```r # Usar el 70% como muestras de entrenamiento y 30% como muestras de validación. random_sample <- createDataPartition(puntos_class$clase, p = 0.7, list = F) entrenamiento <- puntos_class[random_sample, ] %>% st_as_sf() validacion <- puntos_class[-random_sample, ] %>% st_as_sf() ``` -- ```r plot(entrenamiento$geometry) plot(validacion$geometry, add = T, col = "red") ``` <img src="data:image/png;base64,#Aplicaciones_2_files/figure-html/unnamed-chunk-6-1.png" width="100%" /> --- ```r # guardar nuestros puntos como sets separados. st_write(entrenamiento, "puntos_entrenamiento.shp") st_write(validacion, "puntos_validacion.shp") ``` > No cambia la información con la que se clasifica el modelo. > > Es mas facil restituir o mejorar la precisión por clases. > > El entrenamiento y validación cuentan con sets independientes. --- #### Apliquemos la funcion superclass ```r ent <- st_read("ENTRENAMIENTO.shp") val <- st_read("VALIDACION_2.shp") ``` ```r predictiva <- rast("apiladas_maule_2022.tif") print(predictiva) ``` ``` ## class : SpatRaster ## dimensions : 494, 964, 9 (nrow, ncol, nlyr) ## resolution : 30, 30 (x, y) ## extent : 280200, 309120, 6040800, 6055620 (xmin, xmax, ymin, ymax) ## coord. ref. : WGS 84 / UTM zone 19S (EPSG:32719) ## source : apiladas_maule_2022.tif ## names : 1_1_L~SR_B1, 1_1_L~SR_B2, 1_1_L~SR_B3, 1_1_L~SR_B4, 1_1_L~SR_B5, 1_1_L~SR_B6, ... ## min values : -685.500, -274.100, 10.250, -21.100, -90.400, -113.775, ... ## max values : 2082.375, 2378.275, 2952.475, 3480.200, 6308.850, 6300.875, ... ``` --- #### Observando nuestra area de estudio. ```r plot(predictiva[[5]]) # Banda NIR Landsat 8 plot(ent, add = T, col = "red") # puntos de entrenamiento. plot(val, add=T, col = "blue") # puntos de validación. ``` <img src="data:image/png;base64,#Aplicaciones_2_files/figure-html/unnamed-chunk-10-1.png" width="100%" /> --- ### Clasificación usando diferentes metodos #### Maxima verosimilitud. ```r clasificacion_mlc <- superClass(img = predictiva, model = "mlc", trainData = ent, valData = val,responseCol = "id", mode = "classification", minDist = 1) ``` -- #### Random forest. ```r clasificacion_rf <- superClass(img = predictiva, model = "rf", trainData = ent, valData = val,responseCol = "id", mode = "classification", minDist = 1) ``` > La función superClass nos permite clasificar un objeto tipo spatRaster o raster > > Podemos asignar el metodo de clasificacón (por defecto trabaja con random forest "rf"). > > nos entrega la matriz de confusion con los estadisticos generales por clase. > > Ejecutar ?superClass en la consola para ver todos los argumentos disponibles. --- ```r plotRGB(predictiva, r=4,g=3,b=2, stretch="lin") ``` <img src="data:image/png;base64,#Aplicaciones_2_files/figure-html/unnamed-chunk-13-1.png" width="100%" /> --- ```r plot(clasificacion_mlc$map, main = "clasificacion por maxima verosimilitud") ``` <img src="data:image/png;base64,#Aplicaciones_2_files/figure-html/unnamed-chunk-14-1.png" width="100%" /> --- ```r plot(clasificacion_rf$map, main = "clasificacion por RandomForest") ``` <img src="data:image/png;base64,#Aplicaciones_2_files/figure-html/unnamed-chunk-15-1.png" width="100%" /> --- ### Observemos el desempeño interno de nuestros modelos ### Maxima verosimilitud ```r modelo_mlc <- clasificacion_mlc$model print(modelo_mlc) ``` ``` ## Maximum Likelihood Classification ## ## 126 samples ## 9 predictor ## 6 classes: '1', '2', '3', '4', '5', '6' ## ## No pre-processing ## Resampling: Cross-Validated (5 fold) ## Summary of sample sizes: 101, 100, 102, 100, 101 ## Resampling results: ## ## Accuracy Kappa ## 0.8420769 0.8106953 ``` --- ```r modelo_mlc_fit <- clasificacion_mlc$modelFit print(modelo_mlc_fit) ``` ``` ## [[1]] ## TrainAccuracy TrainKappa method ## 1 0.8420769 0.8106953 custom ## ## [[2]] ## Cross-Validated (5 fold) Confusion Matrix ## ## (entries are average cell counts across resamples) ## ## Reference ## Prediction 1 2 3 4 5 6 ## 1 4.2 0.0 0.0 0.0 0.0 0.0 ## 2 0.0 3.8 0.0 0.0 0.6 0.6 ## 3 0.0 0.0 3.4 0.0 0.0 0.2 ## 4 0.0 0.0 0.0 3.0 0.0 0.0 ## 5 0.0 0.2 0.0 0.0 3.4 0.0 ## 6 0.0 0.2 0.8 1.2 0.2 3.4 ## ## Accuracy (average) : 0.8413 ``` --- ### Random Forest ```r modelo_rf <- clasificacion_rf$model print(modelo_rf) ``` ``` ## Random Forest ## ## 126 samples ## 9 predictor ## 6 classes: '1', '2', '3', '4', '5', '6' ## ## No pre-processing ## Resampling: Cross-Validated (5 fold) ## Summary of sample sizes: 101, 100, 100, 102, 101 ## Resampling results across tuning parameters: ## ## mtry Accuracy Kappa ## 2 0.8488205 0.8182497 ## 5 0.8488205 0.8182497 ## 9 0.8488205 0.8182497 ## ## Accuracy was used to select the optimal model using the largest value. ## The final value used for the model was mtry = 2. ``` --- ```r modelo_rf_fit <- clasificacion_rf$modelFit print(modelo_rf_fit) ``` ``` ## [[1]] ## TrainAccuracy TrainKappa method ## 1 0.8488205 0.8182497 rf ## ## [[2]] ## Cross-Validated (5 fold) Confusion Matrix ## ## (entries are average cell counts across resamples) ## ## Reference ## Prediction 1 2 3 4 5 6 ## 1 4.2 0.0 0.0 0.2 0.0 0.0 ## 2 0.0 3.4 0.0 0.0 0.4 0.8 ## 3 0.0 0.0 3.6 0.0 0.0 0.6 ## 4 0.0 0.0 0.0 4.0 0.0 0.0 ## 5 0.0 0.6 0.0 0.0 3.6 0.2 ## 6 0.0 0.2 0.6 0.0 0.2 2.6 ## ## Accuracy (average) : 0.8492 ``` --- ### Antes de continuar ¿Que es una matriz de consufión? > como su nombre lo indica, corresponde a una matriz cuadrada que compara nuestra imagen clasificada con la realidad. > > Presenta una visión general de las asignaciones, tanto de las clasificaciones correctas (elementos de la diagonal) como de las migraciones o fugas (elementos fuera de la diagonal). > > Recoge los denominados errores de omisión y de comisión > --  --- ### Validando nuestro modelo de clasificación. #### Clasificación por maxima verosimilitud. ```r Matriz_confusion_mlc <- clasificacion_mlc$validation$performance$table # matriz de confusión Matriz_confusion_mlc ``` ``` ## Reference ## Prediction 1 2 3 4 5 6 ## 1 9 0 0 0 0 0 ## 2 0 8 0 0 2 2 ## 3 0 0 9 0 0 1 ## 4 0 0 0 7 0 0 ## 5 0 0 0 0 4 1 ## 6 0 1 0 2 3 5 ``` ```r desempeño_general <- clasificacion_mlc$validation$performance$overall[1:2] # estadÃsticos generales desempeño_general ``` ``` ## Accuracy Kappa ## 0.7777778 0.7333333 ``` --- ```r desempeño_clases <- clasificacion_mlc$validation$performance$byClass # precisión por clases. indicadores_clases <- desempeño_clases[,c("Sensitivity","Pos Pred Value")] indicadores_clases ``` ``` ## Sensitivity Pos Pred Value ## Class: 1 1.0000000 1.0000000 ## Class: 2 0.8888889 0.6666667 ## Class: 3 1.0000000 0.9000000 ## Class: 4 0.7777778 1.0000000 ## Class: 5 0.4444444 0.8000000 ## Class: 6 0.5555556 0.4545455 ``` > La "sensitividad" de la clase hace referencia a la precisión del producto. > > El "valor positivo de la prediccion" hace referencia a la precisión del usuario. > --- ### Clasificacón por Random Forest. ```r Matriz_confusion_rf <- clasificacion_rf$validation$performance$table # matriz de confusión Matriz_confusion_rf ``` ``` ## Reference ## Prediction 1 2 3 4 5 6 ## 1 9 0 0 0 0 0 ## 2 0 8 0 0 0 2 ## 3 0 0 9 0 0 0 ## 4 0 0 0 8 1 0 ## 5 0 1 0 0 7 0 ## 6 0 0 0 1 1 7 ``` ```r desempeño_general_rf <- clasificacion_rf$validation$performance$overall[1:2] # estadÃsticos generales desempeño_general_rf ``` ``` ## Accuracy Kappa ## 0.8888889 0.8666667 ``` --- ```r desempeño_clases_rf <- clasificacion_rf$validation$performance$byClass # precisión por clases. indicadores_clases_rf <- desempeño_clases_rf[,c("Sensitivity","Pos Pred Value")] indicadores_clases_rf ``` ``` ## Sensitivity Pos Pred Value ## Class: 1 1.0000000 1.0000000 ## Class: 2 0.8888889 0.8000000 ## Class: 3 1.0000000 1.0000000 ## Class: 4 0.8888889 0.8888889 ## Class: 5 0.7777778 0.8750000 ## Class: 6 0.7777778 0.7777778 ``` ***Para una mejor interpretación de nuestros resultados. Bajemos nuestra matriz a Excel.*** ```r matriz_rf <- clasificacion_rf$validation$performance$table %>% as.data.frame.matrix() ``` ***as.data.frame.matrix transforma (fuerza si es necesario) un objeto matriz en un dataframe*** --- ### BibliografÃa. Wegmann M., Leutner B., Dech S. (2016) Remote Sensing and GIS for Ecologists Using Open Source Software. Ed. Pelagic Zhao, Y., Feng, D., Yu, L., Wang, X., Chen, Y., Bai, Y., Hernández Palma, H., Galleguillos Torres, M., Estades Marfán, C., Biging, G., Radke, J. y Gong, P. (2016). Detailed dynamic land cover mapping of Chile: Accuracy improvement by integrating multi-temporal data. Disponible en https://repositorio.uchile.cl/handle/2250/142288 --- class: inverse middle 